# 生成器是python用于一边生成列表一边用于计算的机制
# 节省资源开销

# 把列表生成式的[]改为()就是一个生成器
l = [x*x for x in range(1, 12)]
print(l)
g = (x*x for x in range(1, 12))
print(g)

# 打印生成器内的元素
print(next(g))

# 使用for循环打印全部生成器内的元素
for n in g:
    print(n)

# 斐波那契数列
# 无法用生成式写出,但是可以用函数


def fib(number):
    n, a, b = 0, 0, 1
    while n < number:
        print(b)
        a, b = b, a+b
        n = n+1


fib(6)

# 函数改为生成器


def fibG(number):
    n, a, b = 0, 0, 1
    while n < number:
        yield b
        a, b = b, a+b
        n = n+1


g = fibG(6)
print(g)
